The present disclosure relates generally to distributed function execution, and more specifically, to distributed function execution for hybrid systems using OpenCL.
Open Computing Language (OpenCL) is a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, Graphics Processing Units (GPUs), and other processors. OpenCL includes a language for writing kernels, which are functions that execute on OpenCL devices, and APIs that are used to define and then control the platforms. OpenCL provides parallel computing using task-based and data-based parallelism. OpenCL was designed to provide applications access to the graphics processing unit for non-graphical computing and thereby extend the power of the GPU beyond graphics.
Currently OpenCL runtime environments are not available for use with certain architectures, such as IBM's System z. In order for these architectures to utilize OpenCL, the architecture must remotely access the OpenCL runtime on a separate architecture. In a zEnterprise configuration, a System z host may call computationally intensive functions on another device, referred to generally as an accelerator. In order for a zOS address space, or zLinux process, to access the API in an OpenCL host program, a remote procedure call (RPC) scheme may be used. However, there are several drawbacks of using currently available RPC schemes in connection with OpenCL. Since OpenCL was designed to be used with a non-distributed system, OpenCL is not designed to optimize data transmission between the various processors and buffers used by the devices in the system.